package kylin.service.impl;

import java.util.ArrayList;
import java.util.List;

import kylin.dao.AdminPowerDao;
import kylin.entity.AdminPower;
import kylin.service.AdminPowerService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


/**
 * @Title 用户Service层 
 * @Description 
 * @author XQL
 * @Date 2015年8月13日 下午4:07:01
 */
@Service
public class AdminPowerServiceImpl implements AdminPowerService {

	@Autowired
	private AdminPowerDao adminPowerDao;
	
	/**
	 * <p>Method Name : getMenu</p>
	 * <p>Method Desc : 获得所有菜单</p>
	 * @Date 2015年9月22日 上午9:41:40
	 * @Author XQL
	 * @return
	 */
	public List<AdminPower> getMenu(){
		AdminPower aPower = new AdminPower();
		aPower.setType(1);//1表示为菜单
		
		List<AdminPower> list = adminPowerDao.findByEntity(aPower);
		
		return this.getTopMenu(list);
	}
	
	/**
	 * <p>Method Name : getTopMenu</p>
	 * <p>Method Desc : 获取顶级菜单</p>
	 * @Date 2015年9月22日 上午9:59:04
	 * @Author XQL
	 * @param list
	 * @return
	 */
	private List<AdminPower> getTopMenu(List<AdminPower> list){
		List<AdminPower> topList = new ArrayList<AdminPower>();
		for(AdminPower aPower : list){
			if(aPower.getParent() == null){
				aPower.setChild(new ArrayList<AdminPower>());
				topList.add(aPower);
			}
		}
		
		list.removeAll(topList);
		
		getChildMenu(topList,list);
		
		return topList;
	}
	
	/**
	 * <p>Method Name : getChildMenu</p>
	 * <p>Method Desc : 获取子集菜单</p>
	 * @Date 2015年9月22日 上午9:59:24
	 * @Author XQL
	 * @param topList
	 * @param list
	 */
	private void getChildMenu(List<AdminPower> topList ,List<AdminPower> list){

		if(list.isEmpty()) return;
		
		List<AdminPower> tempList = new ArrayList<AdminPower>();
		
		for(AdminPower aPower : topList){
			
			for(AdminPower power : list){
				
				if(power.getParent() != null && power.getParent().getId() == aPower.getId()){
					
					power.setParent(null);//一定要将父级清空，不然转换json时，会导致死循环
					
					aPower.getChild().add(power);
					
					tempList.add(power);
				}
			}
		}
		list.removeAll(tempList);
		
		getChildMenu(tempList, list);
	}
	
}
